class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& ma) {
        int m=ma.size();
        int n=ma[0].size();
        vector<vector<int>> dp(m+1,vector<int>(n+2,INT_MAX));
        
        for(int x=0;x<n+2;++x)
        {
            dp[0][x]=0;
        }

        for(int i=1;i<n+1;++i)
        {
            for(int j=1;j<m+1;++j)
            {
                dp[i][j]=ma[i-1][j-1]
                +min(min(dp[i-1][j-1],dp[i-1][j]),dp[i-1][j+1]);
            }
        }
        int mymin=INT_MAX;
        for(int y=1;y<n+1;++y)
        {
            mymin=min(dp[m][y],mymin);
        }
        return mymin;
    }
};
